package Q15_07_FizzBuzz; import java.util.function.Function; import java.util.function.Predicate; public class FBThread extends Thread { private static Object lock = new Object(); protected static int current = 1; private int max; private Predicate<Integer> validate; private Function<Integer, String> printer; int x = 1; public FBThread(Predicate<Integer> validate, Function<Integer, String> printer, int max) { this.validate = validate; this.printer = printer; this.max = max; } public void run() { while (true) { synchronized (lock) { if (current > max) { return; } if (validate.test(current)) { System.out.println(printer.apply(current)); current++; } } } } }